#include <stdio.h>


void fun1(void){
    printf("func1\n");
}

void fun2(void){
    printf("func2\n");
}

int main(void){

    void (*p)(void);     //函数指针
    void (*p1)(int,int); //函数指针
    char (*p2)(int);     //函数指针
    void *(*p3)(int *);  //函数指针，指向void *fun(int *a)这样的函数

    //函数指针赋值，必须要格式（函数头）相同
    //让p这个指针指向fun1整个函数，函数实际上就是一个代码块，这个代码块执行到最后会返回
    p = fun1;

    //如何调用函数指针呢？
    //原始的运行方法
    (*p)();//表示通过*拿到所指向的对象（解引用），然后让它运行
    //简写的方法
    p();//运行函数指针，实际上就是它指向的函数对象的运行

    p = fun2;//修改p的指向
    p();//运行p指向的对象

    
}